Graphics rendering refers generally to the process of generating a two-dimensional image from graphical models. These graphical models define attributes of real or imaginary objects such as the color, shape, and position. A sophisticated three-dimensional model, for example, may describe the surface of an object in terms of its color and shape, and may also specify lighting and shading attributes to be applied to the surface. To add even further surface detail, an image referred to as a texture can be mapped onto the surface of the object. To render this type of object, a graphics system processes the model of the object and generates an array of pixel data, which represents a two-dimensional image of the object.
There is an increasing demand for applications that employ graphics or animation. Computer generated graphics and animation, for example, are used in a variety of applications including games, educational tools, office automation and film making. As the performance of the typical desk-top personal computer continues to increase, more applications are developed to exploit this performance and generate more interesting and interactive graphical interfaces. Despite this increase in performance, rendering of 3-D graphical objects and especially 3-D animation is still difficult to achieve without expensive, special purpose hardware.
Today's real-time graphics rendering systems are particularly costly due to the vast amount of specialized memory and processing resources required to achieve visual realism. To achieve truly interactive and realistic effects, graphical objects must be rendered to generate a new display image every fraction of a second so that the user perceives continuous motion of objects in the scene. In addition, the system must respond with minimal delay to user input so that the reaction to the inputs represented in the display images appears realistic.
Consider, for example, an interactive video game including three-dimensional monsters moving about in a changing environment. To achieve realistic and interactive effects, the graphics rendering system has to generate a new display image at least 12 times a second, and preferably at video rates which range from 60 to 75 frames a second. The delay between the user moving a joystick and the display of the response must be kept to a minimum.
In some graphics rendering systems, the surfaces of the graphical objects are modeled with a mesh of planar polygons. Graphical attributes such as color and texture data are stored at the vertices of the polygon. The process of generating each frame of image data includes a number of steps. First, the system has to compute which objects are potentially visible in the scene. To make this computation, the system typically performs a series of geometric transformations on the vertices of the polygons. As the user moves a joy stick, for example, the position of the viewpoint changes, and the objects move independently and react to input. After determining which objects are potentially visible in the display image, the system transforms potentially visible objects to a two-dimensional space, sometimes referred to as the view space or screen space.
In the next step, the system rasterizes or scan converts the polygons into an array of pixel data. Conventional architectures often store pixel data in a large frame buffer. The buffer stores color intensity values for each element in the array. Additional processing of the polygons or the pixel data is usually required to determine how the objects occlude each other in the scene. A process called anti-aliasing is typically performed to remove artifacts such as jagged edges from the display image. For instance, if an object has a complex and detailed surface, the system may perform anti-aliasing to ensure that the detail is accurately represented. Because of the need to generate the entire image in only fractions of a second, however, it is extremely difficult and expensive to support anti-aliasing or other lighting and shading operations in a real-time system.
The final step is to transfer the rendered display image to a display device. Though other display technology is available, the predominant display technology today for high-resolution graphics is raster graphics. A raster display device includes an array of individual points or picture elements (i.e., pixels), arranged in rows and columns, to produce the image. In a cathode ray tube (CRT), these pixels correspond to a phosphor array provided on the glass faceplate of the CRT. The emission of light from each phosphor in the array is independently controlled by an electron beam that "scans" the array sequentially, one row at a time, in response to stored information representative of each pixel in the image.
In the context of a real-time system, there are a couple of different ways to characterize the rate of display generation. One rate refers to the rate at which the graphics rendering pipeline updates the rendered image in the frame buffer. This is sometimes referred to as the computational rate because it describes the rate at which a new image is computed. Another rate is the rate at which the display device is refreshed. To avoid flickering of the image, the CRT has to be refreshed at least 60 times a second. It is not necessary that the computational rate equal the refresh rate. However, to ensure that new image data can be generated while a current image or frame is being scanned to the display device, conventional architectures often include two separate frame buffers.
From the overview above, it should be apparent that real-time graphics rendering systems designed according to a traditional frame buffer architecture are expensive. The cost is driven by the memory size and memory bandwidth required in a traditional frame buffer architecture. To the extent that the architecture includes parallel processing hardware, the cost is even higher because parallel processing hardware and the specialized memory that it cooperates with adds significantly to the cost of the system. In frame buffer architectures, the memory bandwidth requirements force system designers to use either high cost specialty RAM parts, such as Video RAM or Frame Buffer RAM. Alternatively, very wide bus DRAM arrays have to be employed, placing a high demand on the pin count of the computational elements of the system. Because of the high cost of these components, the development of a 3-D graphics rendering accelerator with real-time performance and realistic visual effects has been an elusive goal.
In the image processing field, image compression techniques are widely used to store and transfer still images and video. However, image compression has many disadvantages in the context of a graphics pipeline using a conventional frame buffer architecture. First, graphics systems often write pixel data in a highly random manner to the frame buffer. Assuming that image compression could be incorporated into such a system, the amount of overhead would be substantial because of the random nature in which pixel data arrives at various locations across the frame buffer. Second, in a real-time system, an entire frame is generated and then discarded. Thus, it is a significant disadvantage to incur the overhead of compressing and then immediately decompressing the image to generate a display image, only to discard the display image after every frame. Third, conventional architectures often use a Z-buffer to perform hidden surface removal. The Z-buffer is not amenable to compression, and thus, it is difficult to achieve compression, even assuming that the pipeline could incur the overhead without sacrificing real-time performance.